/*
 * ==================================================
 * 项目开发者：JerryStark
 * 开发者Email：4771007@qq.com
 * 开发者QQ:4771007
 * 开发范围：web，wap，android,ios,osx or win or linux 应用
 * ==================================================
 */
package RTGame.GetGames;

import RTPower.RTHttp;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author jerry
 */
public class GetOneGame {

    /**
     * 游戏的配置对象
     */
    public JsonObject OneGame;

    /**
     * 游戏英文标签
     */
    public String GameTag;

    /**
     * 游戏中文名称
     */
    public String GameName;

    /**
     * 游戏抓取url
     */
    public String Url;

    /**
     * 游戏抓取页面的类型
     */
    public String Type;

    /**
     * 获取列表的规则
     */
    public JsonArray ListRule;

    /**
     * 获取具体数据对应键值的规则
     */
    public JsonArray DataRule;

    /**
     * 传入一个游戏的json,进行抓取前的初始化
     *
     * @param one_game
     */
    public GetOneGame(JsonObject one_game) {
        OneGame = one_game;
        GameTag = one_game.get("tag").getAsString();
        GameName = one_game.get("name").getAsString();
        Url = one_game.get("url").getAsString();
        Type = one_game.get("type").getAsString();

        ListRule = one_game.getAsJsonArray("list_rule");
        DataRule = one_game.getAsJsonArray("data_rule");
        System.out.println("初始化游戏抓取:" + OneGame.get("name").getAsString());
    }

    /**
     * 开始抓取一个游戏
     * <br>这个抓取已经是在一个新线程了,住区完毕返回json字符串.
     */
    public void Start() {
        //第一步:先抓取url,返回字符串
        String data_string = GetHttp();

        //第二部:开始解析,按照设定的网页类型解析出需要的第一条数据
        ScanOneTypeData(data_string);
    }

    /**
     * 抓取游戏网页,获取网页字符串
     *
     * @return
     */
    private String GetHttp() {
        RTHttp get_http = new RTHttp(Url);
        String result_string = get_http.Get();
        get_http.close();
        return result_string;
    }

    /**
     * 动态根据类型读取指定类的
     */
    private JsonObject ScanOneTypeData(String data_string) {

        JsonObject GetJson = null;
        switch (Type) {
            case "json":
                GetJson = new scan_json().Start(data_string, ListRule, DataRule);
                break;
            case "html":
                GetJson = new scan_html().Start(data_string, ListRule, DataRule);
                break;
        }

        return GetJson;

    }
}
